SignalR দিয়ে রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি

Microsoft Technologies - ডট নেট কোর (Dot.Net Core)
165
165

SignalR একটি লাইব্রেরি যা .NET Core-এ রিয়েল-টাইম ওয়েব অ্যাপ্লিকেশন তৈরিতে ব্যবহৃত হয়। এটি সার্ভার এবং ক্লায়েন্টের মধ্যে ডেটা সোজা এবং দ্রুত পাঠানোর জন্য WebSockets, Long Polling, এবং Server-Sent Events (SSE) ব্যবহার করে। SignalR দিয়ে অ্যাপ্লিকেশনগুলো রিয়েল-টাইম ডেটা আপডেট, চ্যাট অ্যাপ্লিকেশন, লাইভ ফিড, এবং অন্যান্য রিয়েল-টাইম ইন্টারঅ্যাকটিভ ফিচার তৈরি করা সম্ভব।

এই টিউটোরিয়ালে, SignalR ব্যবহার করে একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করার পদ্ধতি দেখানো হবে।


SignalR কী?


SignalR হল একটি রিয়েল-টাইম যোগাযোগ লাইব্রেরি যা .NET Core এবং ASP.NET Core অ্যাপ্লিকেশনগুলির জন্য তৈরি করা হয়েছে। এটি সার্ভার এবং ক্লায়েন্টের মধ্যে দ্রুত এবং দুই দিকে (bidirectional) যোগাযোগ প্রতিষ্ঠা করতে সহায়তা করে। এটি ক্লায়েন্টের কাছে সার্ভার থেকে ডেটা স্বয়ংক্রিয়ভাবে পাঠাতে সক্ষম, যেমন নতুন মেসেজ, ফিড আপডেট, বা অন্য কোনো রিয়েল-টাইম ইনফরমেশন। SignalR ক্লায়েন্টের সাথে সার্ভারের কনেকশন বজায় রাখে এবং যখন সার্ভারে কোনো পরিবর্তন হয় তখন তা ক্লায়েন্টে রিফ্লেক্ট করে।


SignalR দিয়ে চ্যাট অ্যাপ্লিকেশন তৈরি


এই টিউটোরিয়ালে একটি সিম্পল রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করা হবে যেখানে একাধিক ব্যবহারকারী একে অপরের সাথে মেসেজ আদান-প্রদান করতে পারবেন। চলুন শুরু করি।


1. SignalR ইনস্টল করা


প্রথমে SignalR প্যাকেজটি আপনার ASP.NET Core প্রজেক্টে ইনস্টল করতে হবে।

  1. NuGet প্যাকেজ ম্যানেজার থেকে SignalR ইনস্টল করুন:

    dotnet add package Microsoft.AspNetCore.SignalR
    
  2. অথবা, Visual Studio-তে NuGet Package Manager ব্যবহার করে Microsoft.AspNetCore.SignalR ইনস্টল করুন।

2. SignalR Hub তৈরি করা


SignalR ব্যবহার করতে হলে আপনাকে একটি Hub তৈরি করতে হবে, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের পদ্ধতি পরিচালনা করবে।

  1. Hub Class তৈরি করুন:

    একটি ChatHub নামক ক্লাস তৈরি করুন যা Hub ক্লাস থেকে ইনহেরিট করবে।

    using Microsoft.AspNetCore.SignalR;
    
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
    

    এখানে SendMessage মেথডটি ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানোর জন্য ব্যবহৃত হবে এবং ReceiveMessage মেথডটি সার্ভার থেকে ক্লায়েন্টে মেসেজ পাঠাবে।


3. SignalR সার্ভিস কনফিগার করা


আপনার Startup.cs ফাইলের মধ্যে SignalR সার্ভিস কনফিগার করতে হবে।

  1. ConfigureServices মেথডে SignalR সার্ভিস যোগ করুন:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR();
    }
    
  2. Configure মেথডে SignalR হাব রাউটিং কনফিগার করুন:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseRouting();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chathub");
        });
    }
    

    এই কোডটি SignalR Hub (/chathub) কে রাউট করার জন্য ব্যবহৃত হবে। যখন ক্লায়েন্ট এই URL তে সংযোগ করবে, তখন SignalR হাবের সাথে কানেক্ট হবে।


4. ক্লায়েন্ট সাইডে SignalR ইন্টিগ্রেট করা


SignalR হাবের সাথে যোগাযোগ করার জন্য ক্লায়েন্ট সাইডে JavaScript কোড লিখতে হবে। এখানে HTML এবং JavaScript ব্যবহার করে SignalR হাবের সাথে সংযোগ স্থাপন করা হবে।

  1. HTML ফাইল তৈরি করুন:

    একটি সাধারণ HTML ফাইল তৈরি করুন যেখানে ব্যবহারকারী মেসেজ পাঠাতে পারবেন।

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>SignalR Chat</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/signalr/5.0.10/signalr.min.js"></script>
    </head>
    <body>
        <div>
            <input type="text" id="userInput" placeholder="Enter your name" />
            <input type="text" id="messageInput" placeholder="Enter your message" />
            <button onclick="sendMessage()">Send</button>
        </div>
    
        <ul id="messagesList"></ul>
    
        <script>
            const connection = new signalR.HubConnectionBuilder()
                .withUrl("/chathub")
                .build();
    
            connection.on("ReceiveMessage", (user, message) => {
                const li = document.createElement("li");
                li.textContent = `${user}: ${message}`;
                document.getElementById("messagesList").appendChild(li);
            });
    
            connection.start().catch(err => console.error(err));
    
            function sendMessage() {
                const user = document.getElementById("userInput").value;
                const message = document.getElementById("messageInput").value;
                connection.invoke("SendMessage", user, message).catch(err => console.error(err));
            }
        </script>
    </body>
    </html>
    

    এখানে, SignalR হাবের সাথে সংযোগ করার জন্য JavaScript কোড ব্যবহার করা হয়েছে। যখন ব্যবহারকারী মেসেজ পাঠাবে, তখন তা SendMessage মেথডের মাধ্যমে সার্ভারে পাঠানো হবে এবং ReceiveMessage মেথডের মাধ্যমে সব ক্লায়েন্টে মেসেজ রিসিভ হবে।


5. অ্যাপ্লিকেশন চালানো


এখন, আপনার অ্যাপ্লিকেশনটি চালানোর জন্য dotnet run কমান্ড ব্যবহার করতে পারেন অথবা Visual Studio থেকে রান করতে পারেন।

  1. সার্ভার চালু হলে, ব্রাউজারে HTML ফাইলটি ওপেন করুন।
  2. একাধিক ট্যাব বা ব্রাউজারে একই URL খুলুন।
  3. এখন আপনি দেখতে পাবেন যে, যখন একজন ব্যবহারকারী মেসেজ পাঠাবে, তা অন্যান্য সব ক্লায়েন্টে রিয়েল-টাইমে প্রদর্শিত হবে।

SignalR এর অন্যান্য ব্যবহার


SignalR শুধু চ্যাট অ্যাপ্লিকেশন তৈরি করার জন্য নয়, এর আরও অনেক ব্যবহার রয়েছে, যেমন:

  • লাইভ স্ট্যাটাস আপডেট: অর্থাৎ, সার্ভার থেকে স্ট্যাটাস পরিবর্তন হলে তা রিয়েল-টাইমে ক্লায়েন্টে দেখানো।
  • নোটিফিকেশন সিস্টেম: ব্যবহারকারীদের জন্য রিয়েল-টাইম নোটিফিকেশন পাঠানো।
  • লাইভ গেম: গেমে রিয়েল-টাইম প্লেয়ার স্ট্যাটাস এবং আপডেট শেয়ার করা।

সারাংশ


SignalR একটি শক্তিশালী লাইব্রেরি যা .NET Core-এ রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। এটি দুই দিকের যোগাযোগ স্থাপন করে, যেখানে সার্ভার থেকে ক্লায়েন্টে ডেটা দ্রুত পাঠানো যায়। এই টিউটোরিয়ালে একটি সিম্পল চ্যাট অ্যাপ্লিকেশন তৈরি করা হয়েছে SignalR ব্যবহার করে, যা সার্ভার এবং ক্লায়েন্টের মধ্যে রিয়েল-টাইম মেসেজিংয়ের কার্যপ্রণালী প্রদর্শন করে। SignalR দ্বারা তৈরি করা অ্যাপ্লিকেশনগুলি অত্যন্ত ইন্টারঅ্যাকটিভ এবং ব্যবহারকারীদের সাথে লাইভ ডেটা শেয়ার করার সুবিধা প্রদান করে।

common.content_added_by

SignalR পরিচিতি

211
211

SignalR হলো একটি লাইব্রেরি যা ASP.NET Core-এ রিয়েল-টাইম, দ্বিমুখী যোগাযোগ সক্ষম করতে ব্যবহৃত হয়। এটি সার্ভার এবং ক্লায়েন্টের মধ্যে সরাসরি যোগাযোগের পথ তৈরি করে, যার মাধ্যমে সার্ভার ক্লায়েন্টকে তাত্ক্ষণিকভাবে বার্তা পাঠাতে পারে, এবং ক্লায়েন্টও সার্ভারে রিয়েল-টাইম ডেটা পাঠাতে পারে। SignalR এর মাধ্যমে সহজেই WebSocket, long polling, এবং server-sent events সহ বিভিন্ন প্রযুক্তি ব্যবহার করে রিয়েল-টাইম আপডেট প্রদান করা যায়।

SignalR সাধারণত চ্যাট অ্যাপ্লিকেশন, লাইভ স্পোর্টস স্কোর, সামাজিক মিডিয়া ফিড, কিংবা ফিনান্সিয়াল ট্র্যাকিং অ্যাপ্লিকেশনের মতো রিয়েল-টাইম সিস্টেমে ব্যবহৃত হয়।


SignalR এর মূল বৈশিষ্ট্য

  • দ্বিমুখী যোগাযোগ: SignalR সার্ভার এবং ক্লায়েন্টের মধ্যে দুই দিকের যোগাযোগ সক্ষম করে। অর্থাৎ, সার্ভার ক্লায়েন্টে বার্তা পাঠাতে পারে, এবং ক্লায়েন্টও সার্ভারে তথ্য পাঠাতে পারে। এই যোগাযোগ কখনোই থেমে থাকে না, ফলে টেলিমেট্রি বা স্ট্যাটাস আপডেট দ্রুত পৌঁছানো সম্ভব হয়।
  • সক্ষমতা: SignalR স্বয়ংক্রিয়ভাবে বিভিন্ন যোগাযোগ প্রযুক্তির মধ্যে স্যুইচ করে। যদি ব্রাউজার WebSocket সাপোর্ট না করে, তবে SignalR নিজে থেকেই long polling বা server-sent events এ স্যুইচ করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের জন্য সবচেয়ে কার্যকরী পদ্ধতি ব্যবহার করে।
  • গ্রুপ এবং হাব সাপোর্ট: SignalR গ্রুপগুলি তৈরি করতে সহায়তা করে, যার মাধ্যমে নির্দিষ্ট গ্রুপের সদস্যদের মধ্যে বার্তা পাঠানো যায়। এতে একাধিক ব্যবহারকারীকে একযোগে একটি বার্তা পাঠানো সহজ হয়।
  • স্কেলিং: SignalR উচ্চ স্কেলাবিলিটি সমর্থন করে। বড় অ্যাপ্লিকেশনে, যেখানে একাধিক সার্ভার রয়েছে, সেখানে SignalR স্কেল আউট (scale-out) মেকানিজম ব্যবহার করে একাধিক সার্ভারে বার্তা পাঠাতে পারে। এতে ক্লাস্টারের মধ্যে রিয়েল-টাইম বার্তা দ্রুত পৌঁছানো সম্ভব হয়।

SignalR এর ব্যবহৃত ক্ষেত্রে

SignalR বেশ কিছু ক্ষেত্রে ব্যবহৃত হতে পারে, যেমন:

  • চ্যাট অ্যাপ্লিকেশন: রিয়েল-টাইম মেসেজিং, যেমন একে অপরের সাথে লাইভ চ্যাট করা।
  • লাইভ ডেটা ফিড: স্টক মার্কেটের তথ্য, স্পোর্টস স্কোর, কিংবা অন্যান্য ধরনের লাইভ ডেটা ফিড যেখানে বার্তা বা আপডেট মুহূর্তের মধ্যে পরিবর্তিত হয়।
  • নোটিফিকেশন সিস্টেম: বিভিন্ন ধরনের সিস্টেম নোটিফিকেশন, যেমন নতুন মেসেজ, ফলোয়ার, বা পুশ নোটিফিকেশন পাঠানো।
  • গেমিং অ্যাপ্লিকেশন: মাল্টিপ্লেয়ার গেমস যেখানে প্লেয়ারদের মধ্যে দ্রুত আপডেট প্রয়োজন।
  • ডেটা ট্র্যাকিং এবং মনিটরিং: বিভিন্ন IoT ডিভাইস বা সার্ভিসে ঘটে যাওয়া তাত্ক্ষণিক ইভেন্ট বা ডেটা আপডেট।

SignalR কাজ করার পদ্ধতি

SignalR একটি Hub ব্যবহার করে কাজ করে, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপন করে। যখন ক্লায়েন্ট SignalR হাবের সাথে সংযুক্ত হয়, তখন তা সার্ভারের সঙ্গে যোগাযোগ শুরু করতে পারে। Hub ক্লাসে বিভিন্ন মেথড থাকবে যেগুলি ক্লায়েন্টকে ডাটা পাঠাতে বা রিসিভ করতে সাহায্য করে।

ক্লায়েন্টের জন্য JavaScript, .NET বা অন্য প্ল্যাটফর্মের জন্য SDK-এর মাধ্যমে SignalR হাবের সাথে যোগাযোগ করা যায়। সার্ভারটি ক্লায়েন্টদের সুনির্দিষ্ট গ্রুপে বার্তা পাঠাতে পারে অথবা সমস্ত সংযুক্ত ক্লায়েন্টকে বার্তা পাঠাতে পারে।


SignalR সেটআপ

SignalR ব্যবহার করতে হলে ASP.NET Core প্রজেক্টে নিম্নলিখিত স্টেপগুলো অনুসরণ করতে হবে:

  1. SignalR NuGet প্যাকেজ ইনস্টল করা:
    SignalR ব্যবহার করার জন্য প্রথমে আপনার প্রজেক্টে SignalR NuGet প্যাকেজ যোগ করতে হবে:

    dotnet add package Microsoft.AspNetCore.SignalR
    
  2. Hub ক্লাস তৈরি করা:
    একটি হাব ক্লাস তৈরি করুন যেখানে ক্লায়েন্টকে বার্তা পাঠানো হবে।

    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
    
  3. SignalR সার্ভিস কনফিগার করা:
    Startup.cs ফাইলে SignalR সার্ভিস কনফিগার করুন:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR();
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chathub");
        });
    }
    
  4. ক্লায়েন্ট সাইড কোড:
    JavaScript বা C# ক্লায়েন্ট ব্যবহার করে SignalR হাবের সাথে সংযোগ স্থাপন করুন:

    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/chathub")
        .build();
    
    connection.on("ReceiveMessage", function(user, message) {
        console.log(user + " says " + message);
    });
    
    connection.start().then(function() {
        connection.invoke("SendMessage", "User1", "Hello, world!");
    }).catch(function(err) {
        return console.error(err.toString());
    });
    

SignalR এর নিরাপত্তা

SignalR ব্যবহার করার সময় নিরাপত্তার বিষয়টিও গুরুত্বপূর্ন। কিছু নিরাপত্তা ব্যবস্থা হিসেবে:

  • Authentication এবং Authorization: SignalR হাবের সাথে সংযোগ করার আগে ব্যবহারকারীকে সঠিকভাবে প্রমাণীকৃত করা উচিত। এটি ASP.NET Core Identity বা JWT (JSON Web Token) ব্যবহার করে করা যেতে পারে।
  • CORS কনফিগারেশন: যদি SignalR ব্যবহার করা হয় ক্লায়েন্ট সাইডে ব্রাউজার থেকে, তবে CORS পলিসি সঠিকভাবে কনফিগার করা উচিত যাতে অন্য ডোমেইন থেকে রিকোয়েস্ট আসতে পারে।
  • Secure Connections: ওয়েব অ্যাপ্লিকেশনের নিরাপত্তার জন্য HTTPS এবং SSL/TLS কনফিগার করা উচিত।

SignalR একটি শক্তিশালী টুল যা রিয়েল-টাইম যোগাযোগ তৈরি এবং পরিচালনা করার জন্য অত্যন্ত কার্যকরী। এটি সহজে .NET Core অ্যাপ্লিকেশনগুলিতে এক্সটেনশন হিসেবে যুক্ত করা যায় এবং অনেক ধরনের রিয়েল-টাইম ফিচার সহ অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।

common.content_added_by

রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি

167
167

ASP.NET Core-এ একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করতে, SignalR প্রযুক্তি ব্যবহার করা হয়। SignalR হল একটি লাইব্রেরি যা রিয়েল-টাইম, ডুয়াল-ডাইরেকশনাল ওয়েব যোগাযোগের জন্য ব্যবহৃত হয়, যেখানে সার্ভার এবং ক্লায়েন্টের মধ্যে ডাটা একে অপরকে তাত্ক্ষণিকভাবে পাঠানো যায়। এটি ওয়েব অ্যাপ্লিকেশনগুলির জন্য খুবই গুরুত্বপূর্ণ, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ আপডেট এবং নোটিফিকেশন সিস্টেম।

ASP.NET Core SignalR ব্যবহার করে খুব সহজেই একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করা সম্ভব।


SignalR ইনস্টল এবং কনফিগারেশন

প্রথমে SignalR ইনস্টল করতে হবে এবং আপনার ASP.NET Core প্রজেক্টে সেটি কনফিগার করতে হবে।

NuGet প্যাকেজ ইনস্টল করা

SignalR এর প্যাকেজ ইনস্টল করতে Microsoft.AspNetCore.SignalR প্যাকেজটি NuGet থেকে ইনস্টল করুন:

dotnet add package Microsoft.AspNetCore.SignalR

SignalR হাব (Hub) তৈরি করা

SignalR অ্যাপ্লিকেশনটি Hub ক্লাসের মাধ্যমে পরিচালিত হয়। Hub হল SignalR এর কম্পোনেন্ট যা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ তৈরি করে। ক্লায়েন্টরা Hub-কে কানেক্ট করে এবং সার্ভার থেকে মেসেজ পায় বা সার্ভারে মেসেজ পাঠায়।

Hub ক্লাস তৈরি

using Microsoft.AspNetCore.SignalR;

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        // সার্ভার থেকে ক্লায়েন্টে মেসেজ পাঠানো
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

এখানে SendMessage মেথডটি সার্ভারের মাধ্যমে সমস্ত কানেক্টেড ক্লায়েন্টকে মেসেজ পাঠানোর কাজ করে। Clients.All.SendAsync এর মাধ্যমে সার্ভার থেকে সমস্ত ক্লায়েন্টে মেসেজ পাঠানো হয়।


SignalR কনফিগারেশন

SignalR কাজ করার জন্য Startup.cs ফাইলে কিছু কনফিগারেশন করা প্রয়োজন। এখানে ConfigureServices এবং Configure মেথডে SignalR কনফিগার করা হয়।

ConfigureServices মেথডে SignalR কনফিগারেশন

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(); // SignalR সেবা যোগ করা
}

Configure মেথডে SignalR ব্যবহার

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseRouting();

    // SignalR Hub ম্যাপ করা
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub"); // SignalR Hub এর URL ম্যাপ করা
    });
}

এখানে MapHub মেথডের মাধ্যমে SignalR Hub কে একটি URL এর সাথে ম্যাপ করা হয়েছে। এই URL-টি চ্যাট অ্যাপ্লিকেশনের ক্লায়েন্ট সাইডে ব্যবহার করা হবে।


ক্লায়েন্ট সাইডে SignalR ব্যবহার

SignalR ক্লায়েন্ট সাইডে ব্যবহারের জন্য, SignalR JavaScript Client লাইব্রেরি ব্যবহার করতে হবে।

SignalR JavaScript লাইব্রেরি ইনস্টল

প্রথমে, SignalR JavaScript Client লাইব্রেরি ইনস্টল করতে হবে। এটি npm বা CDN মাধ্যমে করা যেতে পারে। যদি আপনি npm ব্যবহার করেন, তাহলে নিচের কমান্ডটি রান করুন:

npm install @microsoft/signalr

যদি আপনি CDN ব্যবহার করতে চান, তবে এই স্ক্রিপ্টটি HTML ফাইলে যুক্ত করুন:

<script src="https://cdnjs.cloudflare.com/ajax/libs/signalr/3.1.13/signalr.min.js"></script>

ক্লায়েন্ট সাইডে SignalR কানেক্ট করা

এখন, ক্লায়েন্ট সাইডে SignalR Hub-এ কানেক্ট হতে হবে এবং মেসেজ পাঠানো এবং প্রাপ্তির জন্য কোড লিখতে হবে।

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chat App</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/signalr/3.1.13/signalr.min.js"></script>
</head>
<body>
    <h2>Chat Application</h2>
    <div id="messagesList"></div>
    <input type="text" id="userInput" placeholder="Enter your name">
    <input type="text" id="messageInput" placeholder="Type a message">
    <button id="sendMessageButton">Send</button>

    <script>
        const connection = new signalR.HubConnectionBuilder()
            .withUrl("/chathub")
            .build();

        // মেসেজ রিসিভ করার জন্য ক্লায়েন্ট সাইডে মেথড ডিফাইন করা
        connection.on("ReceiveMessage", function (user, message) {
            const msg = user + ": " + message;
            const msgList = document.getElementById("messagesList");
            const newMessage = document.createElement("div");
            newMessage.textContent = msg;
            msgList.appendChild(newMessage);
        });

        // SignalR কানেক্ট হওয়া
        connection.start().catch(function (err) {
            return console.error(err.toString());
        });

        // মেসেজ পাঠানোর জন্য ফাংশন
        document.getElementById("sendMessageButton").addEventListener("click", function () {
            const user = document.getElementById("userInput").value;
            const message = document.getElementById("messageInput").value;
            connection.invoke("SendMessage", user, message)
                .catch(function (err) {
                    return console.error(err.toString());
                });
        });
    </script>
</body>
</html>

এখানে, ক্লায়েন্ট সাইডে SignalR কানেকশন তৈরি করা হয়েছে এবং ReceiveMessage নামক মেথডের মাধ্যমে সার্ভার থেকে প্রাপ্ত মেসেজ UI-তে দেখানো হচ্ছে। এছাড়া, SendMessage মেথডটি ব্যবহারকারীর ইনপুট নিয়ে সার্ভারে পাঠানো হচ্ছে।


সারাংশ


ASP.NET Core এবং SignalR ব্যবহার করে রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করা অত্যন্ত সহজ। SignalR ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম যোগাযোগ স্থাপন করে, যা চ্যাট অ্যাপ্লিকেশনগুলোর জন্য আদর্শ। SignalR হাব ব্যবহার করে মেসেজ প্রেরণ এবং গ্রহণ করা হয়, এবং ক্লায়েন্ট সাইডে JavaScript লাইব্রেরি দিয়ে মেসেজ পাঠানো ও গ্রহণ করা সম্ভব হয়। এই প্রক্রিয়াটি ওয়েব অ্যাপ্লিকেশনের জন্য রিয়েল-টাইম ইন্টারঅ্যাকটিভ ফিচার তৈরি করতে সহায়তা করে।

common.content_added_by

WebSockets এবং Long Polling

200
200

WebSockets এবং Long Polling দুটি প্রযুক্তি যা রিয়েল-টাইম ওয়েব অ্যাপ্লিকেশন তৈরিতে ব্যবহৃত হয়, বিশেষ করে যখন সার্ভার এবং ক্লায়েন্টের মধ্যে ক্রমাগত ডেটা ট্রান্সফার প্রয়োজন। এগুলি বিভিন্ন ধরনের রিয়েল-টাইম কমিউনিকেশন সক্ষম করে, কিন্তু তাদের কার্যপ্রণালী এবং কার্যকারিতায় কিছু পার্থক্য রয়েছে।


WebSockets


WebSockets একটি আধুনিক প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে একটি ডাইরেক্ট, পিডাইরেকশনাল, পূর্ণ-ডুপ্লেক্স কানেকশন তৈরি করে। এটি ডেটা একবার কানেক্ট হওয়া শুরু হলে অটোমেটিক্যালি সার্ভার এবং ক্লায়েন্টের মধ্যে আদান-প্রদান করতে দেয়, এবং এই কানেকশনটি স্থায়ীভাবে খোলা থাকে যতক্ষণ না একে বন্ধ করা হয়।

WebSockets-এর সুবিধা

  • দ্রুত এবং কার্যকর: WebSockets কম লেটেন্সি দিয়ে সারা বিশ্বের যেকোনো জায়গা থেকে দ্রুত ডেটা ট্রান্সফার করতে সক্ষম। এটি অ্যাপ্লিকেশনগুলিতে যেমন চ্যাট রুম, রিয়েল-টাইম গেমস, স্টক মার্কেট আপডেট, এবং স্পোর্টস স্কোর ট্র্যাকিং-এর মতো অ্যাপ্লিকেশনের জন্য উপযুক্ত।
  • পূর্ণ-ডুপ্লেক্স কমিউনিকেশন: WebSockets একটি পূর্ণ-ডুপ্লেক্স কানেকশন প্রদান করে, যার মানে হল যে সার্ভার এবং ক্লায়েন্ট একে অপরের সাথে একই সময়ে ডেটা পাঠাতে এবং গ্রহণ করতে সক্ষম।
  • রিয়েল-টাইম ডেটা: এটি কার্যকরীভাবে সার্ভার থেকে ক্লায়েন্টে রিয়েল-টাইম ডেটা পাঠানোর জন্য উপযুক্ত।

WebSocket উদাহরণ (ASP.NET Core)

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/ws", async context =>
        {
            if (context.WebSockets.IsWebSocketRequest)
            {
                var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                // WebSocket কমিউনিকেশন পরিচালনা করার কোড
            }
            else
            {
                context.Response.StatusCode = 400;
            }
        });
    });
}

Long Polling


Long Polling একটি পুরোনো রিয়েল-টাইম কমিউনিকেশন প্রযুক্তি যা সার্ভার এবং ক্লায়েন্টের মধ্যে HTTP রিকোয়েস্ট এবং রেসপন্সের ভিত্তিতে কাজ করে। এখানে, ক্লায়েন্ট সার্ভারে একটি রিকোয়েস্ট পাঠায় এবং সার্ভার তখন পর্যন্ত রেসপন্স দেয় না যতক্ষণ না কোনো নতুন তথ্য উপলব্ধ হয়। যখন নতুন তথ্য আসে, সার্ভার রেসপন্স পাঠায়, এবং ক্লায়েন্ট পরবর্তী রিকোয়েস্ট পাঠানোর জন্য প্রস্তুত থাকে। এই পদ্ধতিতে বারবার HTTP রিকোয়েস্ট পাঠানো হয় এবং একটি নতুন রিকোয়েস্ট যতক্ষণ না আগেরটি সম্পূর্ণ হয় ততক্ষণ শুরু হয় না।

Long Polling-এর সুবিধা

  • সরলতা: Long Polling ইমপ্লিমেন্ট করা সহজ এবং পুরানো ব্রাউজারগুলিতে ভালোভাবে কাজ করে, যেখানে WebSockets সাপোর্ট নাও থাকতে পারে।
  • ট্র্যাফিক কমানো: WebSockets-এর তুলনায় কম ব্যান্ডউইথ ব্যবহার হতে পারে কারণ এখানে একটি HTTP রিকোয়েস্টের মাধ্যমে একাধিক আপডেট পেতে পারে।

Long Polling উদাহরণ (ASP.NET Core)

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/longpolling", async context =>
        {
            // সার্ভার একটি নির্দিষ্ট সময় পর্যন্ত অপেক্ষা করবে এবং ডেটা রিটার্ন করবে
            await Task.Delay(1000);  // উদাহরণস্বরূপ ১ সেকেন্ড অপেক্ষা
            await context.Response.WriteAsync("নতুন ডেটা এসেছে!");
        });
    });
}

WebSockets বনাম Long Polling


বৈশিষ্ট্যWebSocketsLong Polling
কমিউনিকেশন টাইপপূর্ণ-ডুপ্লেক্স (Full-duplex)হাফ-ডুপ্লেক্স (Half-duplex)
কানেকশন টাইপস্থায়ী কানেকশন (Persistent connection)একাধিক সংযোগ (Multiple connections)
প্রযুক্তিWebSocket প্রোটোকল (WebSocket protocol)HTTP প্রোটোকল (HTTP protocol)
লেটেন্সিকম (Low)বেশি (Higher)
সার্ভার রিসোর্সকম (Low)বেশি (Higher)
স্কেলিং সুবিধাকঠিন (Difficult to scale)সহজ (Easier to scale)
সাপোর্টআধুনিক ব্রাউজার সমর্থন (Modern browser support)সব ব্রাউজারে কাজ করে (Works across all browsers)

WebSockets এবং Long Polling দুটি আলাদা রিয়েল-টাইম কমিউনিকেশন টেকনিক। যেখানে WebSockets দ্রুত এবং কার্যকরী পূর্ণ-ডুপ্লেক্স কানেকশন প্রদান করে, Long Polling সহজ এবং ব্যাকওয়ার্ড কম্প্যাটিবল হলেও অনেক বেশি সার্ভার রিসোর্স এবং হাই লেটেন্সির কারণে কম কার্যকরী হতে পারে। WebSockets আধুনিক অ্যাপ্লিকেশনের জন্য অধিক কার্যকরী, তবে Long Polling কিছু ক্ষেত্রে একটি সহজ বিকল্প হতে পারে যেখানে ব্রাউজার বা নেটওয়ার্কের সীমাবদ্ধতা রয়েছে।

common.content_added_by

Authentication এবং Authorization সহ SignalR

251
251

SignalR হলো একটি ASP.NET Core লাইব্রেরি যা রিয়েল-টাইম, দু-মুখী যোগাযোগ সক্ষম করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং কার্যকরী যোগাযোগ তৈরি করতে সাহায্য করে। SignalR সাধারণত চ্যাট অ্যাপ্লিকেশন, লাইভ নিউজ ফিড, এবং অন্যান্য রিয়েল-টাইম পরিষেবায় ব্যবহৃত হয়। তবে, যখন আপনি রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করবেন, তখন নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত Authentication এবং Authorization প্রক্রিয়া।

Authentication হল ব্যবহারকারীর পরিচয় নিশ্চিত করার প্রক্রিয়া, যেখানে ব্যবহারকারী সঠিকভাবে লগইন হয়েছে কিনা তা যাচাই করা হয়। অন্যদিকে, Authorization হল এই প্রক্রিয়া, যেখানে যাচাই করা হয় যে লগইন করা ব্যবহারকারী নির্দিষ্ট একটি রিসোর্স বা এক্সেস করতে অনুমতি পায় কিনা।

SignalR এর সঙ্গে Authentication এবং Authorization যুক্ত করার মাধ্যমে আপনি শুধুমাত্র অনুমোদিত ব্যবহারকারীদের জন্য রিয়েল-টাইম কানেকশন প্রদান করতে পারবেন। এর মাধ্যমে আপনি সঠিকভাবে নিরাপদ এবং প্রাইভেট কমিউনিকেশন নিশ্চিত করতে পারবেন।


SignalR হাব (Hub) তৈরি এবং Authentication

SignalR হাব হচ্ছে একটি সার্ভার-ক্লায়েন্ট যোগাযোগ চ্যানেল। SignalR হাবের মাধ্যমে আপনি সার্ভার থেকে ক্লায়েন্টে রিয়েল-টাইম মেসেজ পাঠাতে পারেন। SignalR হাব তৈরি করার সময় যদি Authentication এবং Authorization যুক্ত করতে চান, তবে আপনাকে কয়েকটি ধাপ অনুসরণ করতে হবে।

1. SignalR হাব ক্লাস তৈরি

প্রথমে SignalR হাব ক্লাস তৈরি করতে হবে যেখানে আমরা রিয়েল-টাইম মেসেজিং লজিক রাখব:

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

এই কোডে SendMessage মেথডটি ব্যবহারকারীর নাম এবং মেসেজ গ্রহণ করে এবং তারপর সমস্ত সংযুক্ত ক্লায়েন্টে পাঠিয়ে দেয়।


2. SignalR এ Authentication কনফিগারেশন

ASP.NET Core অ্যাপ্লিকেশনে SignalR এর মাধ্যমে Authentication সক্ষম করতে হলে, প্রথমে আপনাকে ASP.NET Core Identity বা অন্য কোনো Authentication পদ্ধতি কনফিগার করতে হবে।

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/Login";
            });

    services.AddSignalR();
}

এখানে AddAuthentication এবং AddCookie ব্যবহার করা হয়েছে, যা ASP.NET Core অ্যাপ্লিকেশনে কুকি ভিত্তিক Authentication সংযোগ করবে।


3. SignalR হাবে Authentication যুক্ত করা

SignalR হাবে Authentication যোগ করার জন্য, আপনি ব্যবহারকারীর তথ্য Context.User থেকে নিয়ে, কাস্টম অথরাইজেশন চেক করতে পারেন। নিম্নলিখিত কোডটি দেখুন:

public class ChatHub : Hub
{
    public async Task SendMessage(string message)
    {
        var userName = Context.User.Identity.Name;
        
        if (!Context.User.Identity.IsAuthenticated)
        {
            await Clients.Caller.SendAsync("Error", "User not authenticated");
            return;
        }

        await Clients.All.SendAsync("ReceiveMessage", userName, message);
    }
}

এখানে, Context.User.Identity.Name ব্যবহার করে আমরা ব্যবহারকারীর নাম পেয়েছি এবং যাচাই করেছি যে ব্যবহারকারী অনুমোদিত কিনা। যদি ব্যবহারকারী লগইন না করে থাকে, তবে তা যাচাই করা হবে এবং একটি এরর মেসেজ পাঠানো হবে।


Authorization সহ SignalR

Authorization হল এটি নিশ্চিত করার প্রক্রিয়া যে, একজন ব্যবহারকারী শুধু তার অনুমোদিত রিসোর্স বা কার্যকলাপের জন্য এক্সেস করতে পারবে। SignalR হাবের ক্ষেত্রে, আপনি কাস্টম অথরাইজেশন পলিসি প্রয়োগ করতে পারেন, যা শুধুমাত্র নির্দিষ্ট ব্যবহারকারীদের জন্য রিয়েল-টাইম সেবা অনুমোদন করবে।

1. Authorization পলিসি তৈরি করা

ASP.NET Core এ Authorization পলিসি তৈরি করতে হবে। উদাহরণস্বরূপ, আমরা যদি চাই যে শুধুমাত্র "Admin" রোলের ব্যবহারকারীরা রিয়েল-টাইম চ্যাটে অংশগ্রহণ করতে পারে, তবে আমরা এমন একটি পলিসি তৈরি করতে পারি:

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});

এখানে AddAuthorization পদ্ধতিটি ব্যবহার করে আমরা একটি পলিসি তৈরি করেছি যার নাম AdminOnly। এই পলিসি অনুযায়ী, শুধুমাত্র Admin রোলের ব্যবহারকারী SignalR হাবের মাধ্যমে যোগাযোগ করতে পারবে।


2. SignalR হাবে Authorization পলিসি প্রয়োগ করা

SignalR হাবে Authorization প্রয়োগ করতে, আপনি RequireAuthorization মেথড ব্যবহার করতে পারেন। এটি নিশ্চিত করবে যে, নির্দিষ্ট পলিসি অনুযায়ী শুধুমাত্র অনুমোদিত ব্যবহারকারীরা SignalR হাব অ্যাক্সেস করতে পারে।

public class ChatHub : Hub
{
    [Authorize(Policy = "AdminOnly")]
    public async Task SendMessage(string message)
    {
        var userName = Context.User.Identity.Name;
        
        await Clients.All.SendAsync("ReceiveMessage", userName, message);
    }
}

এখানে, Authorize অ্যাট্রিবিউটটি SendMessage মেথডে প্রয়োগ করা হয়েছে, যা নিশ্চিত করবে যে শুধুমাত্র AdminOnly পলিসি পূর্ণ করা ব্যবহারকারীরা এই মেথডটিতে এক্সেস পাবে।


SignalR এ JWT Authentication

কিছু অ্যাপ্লিকেশনে JWT (JSON Web Token) Authentication ব্যবহৃত হয়, যেখানে ক্লায়েন্ট একটি টোকেন পাঠায় এবং সার্ভার তা যাচাই করে। SignalR এর সাথে JWT Authentication যুক্ত করতে হলে, আপনাকে ক্লায়েন্টে টোকেন পাঠাতে হবে এবং সার্ভারে তা যাচাই করতে হবে।

1. JWT Authentication কনফিগারেশন

ASP.NET Core অ্যাপ্লিকেশনে JWT Authentication কনফিগার করতে হবে:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority = "https://your.authserver.com";
                options.Audience = "your-audience";
            });

    services.AddSignalR();
}

এখানে JWT কনফিগারেশনে, AddJwtBearer পদ্ধতি ব্যবহার করা হয়েছে। এটি SignalR এর ক্লায়েন্ট-সার্ভার যোগাযোগে JWT টোকেন যাচাই করবে।


সারাংশ

SignalR এর সাথে Authentication এবং Authorization যোগ করা অত্যন্ত গুরুত্বপূর্ণ যখন আপনি নিরাপদ এবং অনুমোদিত রিয়েল-টাইম যোগাযোগ ব্যবস্থা তৈরি করতে চান। ASP.NET Core এ আপনি সহজেই Cookie Authentication, JWT Authentication, এবং Authorization Policies ব্যবহার করে SignalR হাবে ব্যবহারকারীদের প্রমাণীকরণ এবং অনুমোদন করতে পারেন। এর ফলে, আপনি শুধুমাত্র নির্দিষ্ট ব্যবহারকারীদের জন্য রিয়েল-টাইম সেবা উপলব্ধ করতে পারবেন, যা আপনার অ্যাপ্লিকেশনকে নিরাপদ এবং স্কেলেবল করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion